package com.yf.exam.modules.repo.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yf.exam.core.api.dto.PagingReqDTO;
import com.yf.exam.core.utils.BeanMapper;
import com.yf.exam.modules.repo.dto.RepoDTO;
import com.yf.exam.modules.repo.dto.request.RepoReqDTO;
import com.yf.exam.modules.repo.dto.response.RepoRespDTO;
import com.yf.exam.modules.repo.entity.Repo;
import com.yf.exam.modules.repo.mapper.RepoMapper;
import com.yf.exam.modules.repo.service.DepartTypeService;
import com.yf.exam.modules.repo.service.RepoService;
import com.yf.exam.modules.sys.depart.service.SysDepartService;
import com.yf.exam.modules.user.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

/**
* <p>
* 语言设置 服务实现类
* </p>
*
* @author 聪明笨狗
* @since 2020-05-25 13:23
*/
@Service
public class RepoServiceImpl extends ServiceImpl<RepoMapper, Repo> implements RepoService {

    @Autowired
    private RepoMapper repoMapper;
    
    @Autowired
    private DepartTypeService departTypeService;
    
    @Autowired
    private SysDepartService sysDepartService;

    @Override
    public IPage<RepoRespDTO> paging(PagingReqDTO<RepoReqDTO> reqDTO) {
        // 如果是公共题库查询，不需要限制用户
        if (reqDTO.getParams() != null && Boolean.TRUE.equals(reqDTO.getParams().getOnlyPublic())) {
            // 如果有选择部门，则查询该部门及其所有子部门的题库
            if (StringUtils.hasText(reqDTO.getParams().getSchoolId())) {
                // 获取该部门及其所有子部门ID
                List<String> departIds = sysDepartService.listAllSubIds(reqDTO.getParams().getSchoolId());
                // 添加当前部门ID
                departIds.add(reqDTO.getParams().getSchoolId());
                return baseMapper.pagingByDepartIds(reqDTO.toPage(), reqDTO.getParams(), departIds);
            }
            return baseMapper.paging(reqDTO.toPage(), reqDTO.getParams(), null);
        } else {
            // 否则只查询当前用户创建的题库
            String userId = UserUtils.getUserId();
            return baseMapper.paging(reqDTO.toPage(), reqDTO.getParams(), userId);
        }
     }

    @Override
    public void save(RepoDTO reqDTO) {

        //复制参数
        Repo entity = new Repo();
        BeanMapper.copy(reqDTO, entity);

        // 默认填充创建人与学校
        if(entity.getOwnerId() == null){
            entity.setOwnerId(UserUtils.getUserId());
        }
        if(entity.getSchoolId() == null){
            entity.setSchoolId(UserUtils.getDepartId());
        }
        if(entity.getIsPublic() == null){
            entity.setIsPublic(false);
        }
        this.saveOrUpdate(entity);
    }
}